#ifndef ENGINE_RENDERER_H
#define ENGINE_RENDERER_H


#include "Synaptic/Misc.h"

#include <cstdio>
namespace Engine { namespace Synaptic { class Surface; }  } 
namespace Engine { namespace Resource { class Graphic; }  } 

namespace Engine {

class Renderer {
  public:
    // I plan adding full hw support later.
    enum RenderTypes {
    	RENDERER_NOT_DEFINED = -1,
    	RENDERER_SOFTWARE = 0//Uses software renderer: SDL

    };

	static Misc::Frame camera; // Camera position and viewing frame

  private:
	static RenderTypes renderType; 
	static Misc::Frame windowFrame; 
	static SDL_Surface * screen; 

  public:
	static bool raise(RenderTypes type, int width = 640, int height = 480) throw(char *); 
	static void render(const Engine::Resource::Graphic & visual); // Render graphics into screen using default renderer
	static void render(const Engine::Resource::Graphic & sourceVisual, Engine::Resource::Graphic & destinationVisual); // Render graphics into another graphic using default renderer
	static void flip(); 

  private:
	Renderer(); 
	virtual ~Renderer(); 
};

} // namespace Engine
#endif
